IT鐵人
前面提到電腦會輪流執行不同的程式,而在輪流的過程中一定會有轉換的步驟,這個步驟就叫做Context Switching。
它的定義是:當CPU要切換到另一個process時,OS要儲存舊有的process狀態,並且載入新的process狀態,就稱為Context Switch。
就像是這張圖一樣,在切換的過程中會由系統管理,並且會花費一定的時間,時間長短大多取決於硬體,例如Context內容多寡、指令速度的快慢、Register是否夠用。
Overhead指的是成本,通常在OS中指的是額外的時間成本,改善Context Switch Overhead的主要方法有下面兩者:
Multiple Registers Set
如果只有一套Register,那麼新Process要載入的時候要等舊Process存會去PCB才行。
每個Process都有自己的Registers Set的話,當Context Switch發生時,只要把point切換到另一套Registers Set就好。
Multithread
Thread的部分會在後面的章節說明,他的overhead會比切換process更低。
Dispatcher的目的就是分配CPU給CPU Scheduler所挑出的user process,他的主要工作包含以下三者:
1.Context Switching
2.Switch mode to user mode
3.Jump to the execution entry of that process
以上三個時間加總稱為Dispatch Lantency,當然我們也會希望能減少這樣的時間。
電腦的Process也有複雜的關係,不是所有的Process都是平等的,有的會有上下關係,有的會有資料共用的關係等等,底下會講一些Process的觀念。
任何一個process均可建立process,通常parent prceoss creates many child processes。
建立child process的目的是要他執行工作。
child所做的工作,分為下面兩種類型:
1.與parent相同的工作,ex:vi editor(Linux常用的文字編輯指令)。
2.與parent不同的工作,specific task。
Process的資料提供來源有兩者:
1.OS
2.parent(全部與child共享、subset of resources)
parent process創立child process之後可能有不同的對待方式,就像是不同的父母對不同的小孩有不同的待遇。
1.parent等待child完成工作。
2.parent和child同時進行工作。
process執行過程可能遭遇各種狀況,最常見的是完成工作發出system call(ex:Exit()),告訴kernel終止他,收回resource。
還可能發生異常,由kernel自行終止(ex:divide by Zero)。
也有可能parent動手處決child,例如:child已完成交辦工作、child使用過多resource、parent被kernel終止導致其下所有child一併終止(Cascading termination)。
不過也有可能parent終止後,OS允許child繼續存活,此時child的parent可能變成OS或是原先的grandparent。
此外child還有可能成為orphan或是zombie,這部分蠻有趣的,也是每年系上工作站被搞垮的原因之一,因為許多修OS的學生在工作站上面執行程式生成太多zombie,導致工作站塞爆無法進入。
上一篇 | 下一篇 |
---|---|
Process | 常用Sysem Call |
因為有時child process需要被消除,而消除別的process又會用kill這個字,變成有時候google內容引人遐想。